<?php
/**
 * WebProduction Shop (wpshop)
 * @copyright (C) 2011-2012 WebProduction (tm) <webproduction.com.ua>
 *
 * This program is commercial software; you cannot redistribute it and/or
 * modify.
 */

/**
 * @author Maxim Miroshnichenko <max@webproduction.com.ua>
 * @copyright WebProduction
 * @package Shop
 */
class Shop_URLParser implements Engine_IURLParser {

    /**
     * Возвращает URL, на основании которого Engine будет искать необходимый контент
     *
     * @return string
     */
    public function getMatchURL() {
        // проверяем URL на категорию
        $url = Engine_URLParser::Get()->getTotalURL();
        $url_md5 = md5($url);
        $result = false;
        if (isset($this->_matchArray[$url_md5])) {
            return $this->_matchArray[$url_md5];
        }

        $urlOriginal = $url;
        $url = trim($url, '/');
        $url = explode('/', $url);
        $urlLast = $url[count($url) - 1];

        if (!substr_count($urlOriginal, 'admin/')) {

            // потом страницы
//            try {
//                $page = BC::Get()->getTextPageService()->getTextPageByURL($urlLast);
//                $result = $page->makeURL(false);
//                $this->_matchArray[$url_md5] = $result;
//                return $result;
//            } catch (Exception $e) {}
                       
        }
        if ($result) {
            $result = Engine_URLParser::Get()->getMatchURL();
            $this->_matchArray[$url_md5] = $result;
        }
        
        return $result;
    }

    /**
     * Для текущей открытой страницы получить идентификатор, который
     * с большой степенью вероятности будет ее однозначно идентифицировать
     *
     * Необходим для системы кеширования контентов.
     *
     * @return string
     */
    public function makeURLID() {
        return Engine_URLParser::Get()->makeURLID();
    }

    /**
     * Возвращает "чистый" URL запрос
     *
     * @author Ramm
     * @return string
     */
    public function getTotalURL() {
        return Engine_URLParser::Get()->getTotalURL();
    }

    /**
     * Возвращает часть URL запроса, которая содержит содержит GET параметры
     *
     * @return string
     */
    public function getGETString() {
        return Engine_URLParser::Get()->getGETString();
    }

    /**
     * Возвращает хост
     *
     * @return string
     */
    public function getHost() {
        return Engine_URLParser::Get()->getHost();
    }

    /**
     * Возвращает аргументы передаваемые странице
     *
     * @return array
     */
    public function getArguments() {
        return Engine_URLParser::Get()->getArguments();
    }

    /**
     * Возвращает аргумент по ключу
     *
     * @throws Engine_Exception
     * @param string $key
     * @return mixed
     */
    public function getArgument($key) {
        return Engine_URLParser::Get()->getArgument($key);
    }

    /**
     * Добавить агрумент.
     * Метод добавлен по инициативе.
     *
     * @author Max
     * @param string $key
     * @param mixed $value
     */
    public function setArgument($key, $value) {
        return Engine_URLParser::Get()->setArgument($key, $value);
    }

    /**
     * Возвращает аргумент по ключу (без генерации исключения в случае его отсутствия - тогда вернет false)
     *
     * @param string $key
     * @return mixed
     */
    public function getArgumentSecure($key) {
        return Engine_URLParser::Get()->getArgumentSecure($key);
    }

    /**
     * Возвращает ПОЛНЫЙ URL с гет параметрами, если они были переданы
     *
     * @return string
     */
    public function getCurrentURL() {
        return Engine_URLParser::Get()->getCurrentURL();
    }

    /**
     * @return Shop_URLParser
     */
    public static function Get() {
        if (!self::$_Instance) {
            self::$_Instance = new self();
        }
        return self::$_Instance;
    }

    private function __construct() {

    }

    private function __clone() {

    }

    private static $_Instance = null;

    /**
     * Кеш отработанных URLов
     *
     * @var array
     */
    private $_matchArray = array();

}